QListWidget
- QListWidget : 列表選擇元件。可以存放字串和其他元件。
QListWidget 添加元件和增加刪除元素到列表。
-
QListWidget()
: 創立一個列表。列表裡的元素每個類別都是 QListWidgetItem
,假如今天輸入字串,他也會自己轉成 QListWidgetItem
類別。
-
addItem(str or QListWidgetItem)
和 addItems([str])
: 添加元素進列表裡,可以一個一個添加,也可以使用序列增加,但只能是字串序列。下面範例是使用 addItems
添加A和B。
from PySide6.QtWidgets import QApplication , QWidget , QListWidget , QVBoxLayout
class Mywindow(QWidget):
def __init__(self):
super().__init__()
#建立一個列表,並添加A和B
List = QListWidget()
List.addItems(['A','B'])
layout = QVBoxLayout()
layout.addWidget(List)
self.setLayout(layout)
if __name__ == "__main__":
app = QApplication([])
window = Mywindow()
window.show()
app.exec()
-
insertItem(index,str or QListWidgetItem)
和 insertItems(index,[str])
: 插入元素進列表。要用序列插入要注意只能用字串序列。
-
takeItem(index)
: 刪除元素。
下面範例是將apple pie 刪除,並插入一個元素。
from PySide6.QtWidgets import QApplication , QWidget , QListWidget , QVBoxLayout
from PySide6.QtCore import Qt
class Mywindow(QWidget):
def __init__(self):
super().__init__()
QList = QListWidget()
QList.addItems(["apple pie","apple","banana",])
QList.takeItem(0)
QList.insertItem(1,"插入的元素")
#布局
layout = QVBoxLayout()
layout.addWidget(QList)
self.setLayout(layout)
if __name__ == "__main__":
app = QApplication([])
window = Mywindow()
window.show()
app.exec()
QListWidgetItem 使用
-
QListWidgetItem
: 如果想要添加除了字串的元件進去,可以用 addItem(QListWidgetItem)
。使用方法以按鈕和標籤舉例。
- 先建立一個
QWidget
放入標籤和按鈕。
- 使用
addItem(QListWidgetItem)
將 QListWidgetItem
添加到列表裡。
- 使用
setSizeHint(QWidget.sizeHint())
設置 QListWidgetItem
的大小,與 QWidget
大小匹配。
- 使用
setItemWidget(QListWidgetItem,widget)
把建立好的 QWidget
設定到QListWidgetItem
裡面
from PySide6.QtWidgets import QApplication , QWidget , QListWidget , QVBoxLayout , QListWidgetItem , QPushButton , QHBoxLayout , QLabel
class Add(QWidget):
def __init__(self):
super().__init__()
widget = QHBoxLayout()
label = QLabel("標籤")
btn = QPushButton("按鈕")
widget.addWidget(label)
widget.addWidget(btn)
self.setLayout(widget)
class Mywindow(QWidget):
def __init__(self):
super().__init__()
QList = QListWidget()
Item = QListWidgetItem()
widget = Add()
# 設置QListWidgetItem的大小,匹配自定義小部件
Item.setSizeHint(widget.sizeHint())
QList.addItem(Item)
# 將設置好的QWidget設定給QListWidgetItem
QList.setItemWidget(Item,widget)
layout = QVBoxLayout()
layout.addWidget(QList)
self.setLayout(layout)
if __name__ == "__main__":
app = QApplication([])
window = Mywindow()
window.show()
app.exec()
QListWidget 查找
-
item(index)
: 取出指定的元素。
-
findItem(str,flag)
: 查找元素,有不同的找尋方式,需要使用 Qt.MatchFlag
。下面範例是選用 MatchContains
只要包含指定的文字就會列印出來。
from PySide6.QtWidgets import QApplication , QWidget , QListWidget , QVBoxLayout , QListWidgetItem , QPushButton , QHBoxLayout , QLabel
from PySide6.QtCore import Qt
class Mywindow(QWidget):
def __init__(self):
super().__init__()
QList = QListWidget()
QList.addItems(["apple pie","apple","banana",])
#只要包含apple就會列印出來
result = QList.findItems("apple",Qt.MatchFlag.MatchContains)
for i in result:
print(i.text())
layout = QVBoxLayout()
layout.addWidget(QList)
self.setLayout(layout)
if __name__ == "__main__":
app = QApplication([])
window = Mywindow()
window.show()
app.exec()
QListWidget 常用的信號
-
currentItemChanged.connect(function)
: 當選擇改變。
-
itemChanged.connect(function)
: 當元素選中狀態改變。可以搭配 setCheckState(Qt.CheckState)
使用,會在新增的那列增加一個勾選框。
下面範例是在 apple pie 前面增加勾選框,當勾選會列印文字,還有選擇改變時會列印文字。
from PySide6.QtWidgets import QApplication , QWidget , QListWidget , QVBoxLayout , QListWidgetItem , QPushButton , QHBoxLayout , QLabel
from PySide6.QtCore import Qt
class Mywindow(QWidget):
def __init__(self):
super().__init__()
QList = QListWidget()
QList.addItems(["apple pie","apple","banana",])
#將apple pie 設定沒選狀態
QList.item(0).setCheckState(Qt.CheckState.Unchecked)
# 選擇狀態改變
QList.currentItemChanged.connect(lambda: print("選擇的元素改變了"))
QList.itemChanged.connect(lambda: print("apple pie 選中狀態改變了"))
#布局
layout = QVBoxLayout()
layout.addWidget(QList)
self.setLayout(layout)
if __name__ == "__main__":
app = QApplication([])
window = Mywindow()
window.show()
app.exec()
總結
功能 |
方法 |
創建列表 |
QListWidget() |
添加元素(單個) |
addItem(str or QListWidgetItem) |
添加元素(多個) |
addItems([str]) |
插入元素(單個) |
insertItem(index,str or QListWidgetItem) |
插入元素(多個) |
insertItem(index,[str]) |
刪除元素 |
takeItem(index) |
- 添加字串的話,會自動轉成 QListWidgetItem 這類別。
- QListWidgetItem 使用
- 先建立一個
QWidget
放入元件。
- 使用
addItem(QListWidgetItem)
將 QListWidgetItem
添加到列表裡。
- 使用
setSizeHint(QWidget.sizeHint())
設置 QListWidgetItem
的大小,與 QWidget
大小匹配。
- 使用
setItemWidget(QListWidgetItem,widget)
把建立好的 QWidget
設定到QListWidgetItem
裡面
- QListWidget 查找
要配合 Qt.MatchFlag
選擇要的搜索方式。
功能 |
方法 |
查找 |
findItem(str,flag) |
功能 |
方法 |
選擇改變 |
currentItemChanged.connect(function) |
選中狀態改變 |
itemChanged.connect(function) |